//package com.fingard.dsp.bank.directbank.citi01;
//
//import java.io.BufferedReader;
//import java.io.File;
//import java.io.FileInputStream;
//import java.io.InputStreamReader;
//import java.util.Calendar;
//import java.util.Date;
//
//import com.alibaba.fastjson.JSONObject;
//import com.fingard.constant.Format;
//import com.fingard.dsp.bank.directbank.bankInterface.ITransaction;
//import com.fingard.dsp.bank.directbank.ceb01.CEB01Header;
//import com.fingard.dsp.bank.reqrespobj.transaction.Req7515TodayTrans;
//import com.fingard.dsp.bank.reqrespobj.transaction.Req7516HisTrans;
//import com.fingard.dsp.bank.reqrespobj.transaction.RetAtsTrans;
//import com.fingard.dsp.bank.reqrespobj.transaction.detail.RetAtsTransDetail;
//import com.fingard.io.FileHelper;
//import com.fingard.text.StringHelper;
//import com.fingard.util.DateHelper;
//import com.fingard.xml.XElement;
//import com.fingard.xml.XmlTextReader;
//import com.fingard.xml.XmlTextWriter;
//
//import static com.fingard.text.StringHelper.trimEndFileSp;
//
//public class CITI01Transaction extends CITI01Base implements ITransaction{
//
//    @Override
//    public RetAtsTrans d_7516_HisTrans(Req7516HisTrans p_req7516) throws Exception {
//        RetAtsTrans retAts = new RetAtsTrans(p_req7516.reqHeader);
//        String tmpRespCode = "";
//        String tmpRespInfo = "";
//        retAts.writeStart();//写返回ATS的统一头部信息
//        String accountNum = p_req7516.actNum;
//        Date dateStart = Format.Date8Format.parse(p_req7516.dateFrom);
//        Date dateEnd = Format.Date8Format.parse(p_req7516.dateTo);
//        Calendar calendar = Calendar.getInstance();
//        /*
//        if ("api".equals(getBankConfig().getValueAsString("channelFlag"))) {
//            Calendar tmpCalendarFrom = Calendar.getInstance();
//            tmpCalendarFrom.setTime(p_req7516.getDateFrom());
//
//            Calendar tmpCalendarTo = Calendar.getInstance();
//            tmpCalendarTo.setTime(p_req7516.getDateTo());
//
//
//            JSONObject reqJSON = new JSONObject();
//            reqJSON.put("TranRefNo", p_req7516.reqHeader.reqSeqID);
//            reqJSON.put("FromDate", iosDate(p_req7516.dateFrom));
//            reqJSON.put("BranchNo", p_req7516.reqHeader.reqSeqOrBatNo);
//            reqJSON.put("PymtCurrency", p_req7516.actCur);
//            reqJSON.put("AccountNo", p_req7516.actNum);
//
//            //测试代码：打印报文
//            //System.out.println("发送银行报文:\n"+xmlWriter.toXmlString());
//            String[] tmpStrRet = sendToBank(reqJSON.toJSONString(), "transaction");
//            XmlTextReader tmpBkReader;
//            //	String[] tmpStrRet ={"",""};
//            //	tmpStrRet[0]="";
//            if (tmpStrRet[0].length() == 0) {
//                StringBuilder tmpSbMsg = new StringBuilder();
//                tmpBkReader = loadBankRespXmlReader(tmpStrRet[1], tmpSbMsg);
//                if (tmpBkReader != null) {
//
//                    // #start "提取各返回节点内容"
//                    while (tmpBkReader.read("/report/reportEntry")) {
//                        {
//                            RetAtsTransDetail tmpRetDetail = new RetAtsTransDetail();
//                            XElement tmpRetNode = tmpBkReader.readedXElement;
//                            String dealDate = tmpRetNode.getSingleText("transactionDateTime");
//                            String dealTime = tmpRetNode.getSingleText("timestamp");
//                            tmpRetDetail.actNum = p_req7516.actNum;
//                            tmpRetDetail.tranDate = dealDate.substring(0, 10);//格式2016-08-01
//                            tmpRetDetail.valueDate = tmpRetDetail.tranDate;//格式yyyy-MM-dd
//                            tmpRetDetail.tranTime = tmpRetDetail.tranDate + "T" + dealTime;//格式"yyyy-MM-dd HH:mm:ss"
//                            tmpRetDetail.recAccNum = tmpRetNode.getSingleTextNotNull("beneficiaryAccountNumber").trim();
//                            tmpRetDetail.recAccName = tmpRetNode.getSingleTextNotNull("transactionUserName").trim();
//                            tmpRetDetail.payCode = tmpRetNode.getSingleTextNotNull("summary").trim();
//
//                            String cdflag = tmpRetNode.getSingleText("debitAccountNumber");
//                            if (cdflag.equals(p_req7516.actNum)) {
//                                tmpRetDetail.cdFlag = "1";
//                            } else {
//                                tmpRetDetail.cdFlag = "2";
//                            }
//
//                            tmpRetDetail.tranAmt = tmpRetNode.getSingleText("paymentAmount");
//                            retAts.writeRetDetail(tmpRetDetail);
//                        }
//                    }
//                } else {
//                    tmpRespCode = "-1";
//                    tmpRespInfo = tmpSbMsg.toString();
//                }
//            } else {
//                tmpRespCode = "-1";
//                tmpRespInfo = tmpStrRet[1];
//            }
//        } else {*/
//            while (!dateStart.after(dateEnd)) {
//                String dealedPath = trimEndFileSp(getBankConfig().getValueAsString("MTPath"))
//                        + File.separator + Format.Date8Format.format(dateStart) + File.separator + accountNum + "_7516.txt";
//                //不存在当前日期的明细文件，查询下一天
//
//                if (!FileHelper.existFile(dealedPath)) {
//                    calendar.setTime(dateStart);
//                    calendar.add(Calendar.DAY_OF_MONTH, 1);
//                    dateStart = calendar.getTime();
//                    continue;
//                }
//                String readLine = "";
//                InputStreamReader isr = new InputStreamReader(new FileInputStream(dealedPath), "UTF-8");
//                BufferedReader reader = new BufferedReader(isr);
//                while ((readLine = reader.readLine()) != null) {
//                    //账号 | 币种 | 交易日期| 交易时间| 计息日期 | 交易金额 |借贷标识| 账户余额 |对方账号|
////                    对方户名 | 对方银行 |用途|流水号
//                    String[] transDetail = readLine.split("\\|");
//                    RetAtsTransDetail detail = new RetAtsTransDetail();
//                    detail.actArea = p_req7516.actArea;
//                    detail.actNum = transDetail[0];
//                    detail.cur = convertCurToATS(transDetail[1]);
//                    detail.tranDate = transDetail[2];
//                    detail.tranTime = transDetail[3];
//                    detail.valueDate = transDetail[4];
//                    detail.tranAmt = transDetail[5];
//                    detail.cdFlag = transDetail[6];
//                    detail.accBal = transDetail[7];
//                    detail.recAccNum = transDetail[8].trim();
//                    detail.recAccBank = transDetail[10].trim();
//                    detail.recAccName = transDetail[9].trim();
//                    detail.usage = transDetail.length > 11 ? transDetail[11].trim() : "";
//                    detail.busType = transDetail.length > 13 ? transDetail[13].trim() : "";
//                    retAts.writeRetDetail(detail);
//                }
//                reader.close();
//                calendar.setTime(dateStart);
//                calendar.add(Calendar.DAY_OF_MONTH, 1);
//                dateStart = calendar.getTime();
//   //         }
//
//        }
//
//   //     retAts.writeRespCode(tmpRespCode);
//   //     retAts.writeRespInfo(tmpRespInfo);
//        retAts.writeEnd();
//        return retAts;
//        /*RetAtsTrans retAts = new RetAtsTrans(p_req7516.reqHeader);
//        String AccountNum  = p_req7516.actNum;
//        retAts.writeStart();//写返回ATS的统一头部信息
//
//        RetAtsTransDetail retDetail;
//        Date d = new Date();    //早上8点发送昨天的对账单
//        String date = Format.Date8Format.format(d);
//        String mtFilePath  = trimEndFileSp(getBankConfig().getValueAsString("MTPath")) + File.separator + date + File.separator+"MTFILE";
//        WriteBankLogLn("查找地址："+ mtFilePath);
//        if(existFile(mtFilePath))
//        {
//            Map<List<BaseContent>,DetailContexts[]> myMap = analysisMTFile(mtFilePath);
//            List<BaseContent> contents = null;
//            for(List<BaseContent> key : myMap.keySet())
//            {
//                contents = key;
//            }
//
//            DetailContexts[] AllDetail =  myMap.get(contents)   ;
//            for(DetailContexts i : AllDetail){
//                if(i == null) continue;
//                retDetail = new RetAtsTransDetail();
//                if(!i.AccountNumber.equals(AccountNum)) continue;
//                retDetail.actNum = AccountNum;
//                retDetail.recAccName = i.RecAccName;
//                retDetail.recAccBank = i.RecAccBannk;
//                retDetail.tranAmt = i.TransAmt;
//                retDetail.abstr = i.Abstr;
//                retDetail.cdFlag = i.CDFlag;
//                retDetail.accBal = i.AccBal;
//                retDetail.tranDate = i.TranDate;
//                retDetail.recAccNum  = i.RecAccNum;
//                retDetail.tranTime  = i.TranTime;
//                retDetail.valueDate = i.TranDate;
//                retDetail.accBal  = "0";
//                retDetail.originator = i.Abstr;
//                retAts.writeRetDetail(retDetail);
//            }
//        }
//        else
//        {
//            retAts.writeRespInfo("银行未返回，请稍后再试");
//        }
//        retAts.writeEnd();
//        return retAts;*/
//    }
//
//    /**
//     * 今日明细
//     * @param p_req7515
//     * @return
//     * @throws Exception
//     */
//    @Override
//    public RetAtsTrans d_7515_TodayTrans(Req7515TodayTrans p_req7515) throws Exception {
//        if("api".equals(getBankConfig().getValueAsString("channelFlag"))){
//            Req7516HisTrans tmpReq7516 = new Req7516HisTrans(p_req7515.reqHeader);
//            tmpReq7516.actArea = p_req7515.actArea;
//            tmpReq7516.actCur = p_req7515.actCur;
//            tmpReq7516.actNum = p_req7515.actNum;
//            String tmpStrToday = Format.Date8Format.format(new Date());
//            tmpReq7516.dateFrom = tmpStrToday;//设置开始时间和结束时间都为当天
//            tmpReq7516.dateTo = tmpStrToday;
//            return d_7516_HisTrans(tmpReq7516);
//        }else {
//            RetAtsTrans retAts = new RetAtsTrans(p_req7515.reqHeader);
//            //写返回ATS的统一头部信息
//            retAts.writeStart();
//            String accNum = p_req7515.actNum;
//            String date = Format.Date8Format.format(new Date());
//            String dealedPath = getBankConfig().getValueAsString("MT942Path") + File.separator + date + File.separator + accNum + "_7515.txt";
//            if (FileHelper.existFile(dealedPath)) {
//                InputStreamReader isr = new InputStreamReader(new FileInputStream(dealedPath), "GBK");
//                BufferedReader reader = new BufferedReader(isr);
//                String readLine = "";
//                while ((readLine = reader.readLine()) != null) {
//                    // 账号 | 币种 | 交易日期| 交易时间| 计息日期 | 交易金额 |借贷标识| 账户余额 |对方账号|对方户名 | 对方银行 |用途 |业务类型
//                    String[] transDetail = readLine.split("\\|");
//                    RetAtsTransDetail detail = new RetAtsTransDetail();
//                    detail.actArea = p_req7515.actArea;
//                    detail.actNum = transDetail[0];
//                    detail.cur = convertCurToATS(transDetail[1]);
//                    detail.tranDate = transDetail[2];
//                    detail.tranTime = transDetail[3];
//                    detail.valueDate = transDetail[4];
//                    detail.tranAmt = transDetail[5];
//                    detail.cdFlag = transDetail[6];
//                    detail.accBal = transDetail[7];
//                    detail.recAccNum = transDetail[8].trim();
//                    detail.recAccBank = transDetail[10].trim();
//                    detail.recAccName = transDetail[9].trim();
//                    detail.usage = transDetail.length > 11 ? transDetail[11].trim() : "";
//                    detail.busType = transDetail.length > 13 ? transDetail[13].trim() : "";
//                    retAts.writeRetDetail(detail);
//                }
//            } else {
//                retAts.writeRespCode("0");
//                retAts.writeRespInfo("今日明细银行还没返回,请稍后再查");
//            }
//            retAts.writeEnd();
//            return retAts;
//        }
//    }
//}
